import pandas as pd
import folium
from folium import plugins
import cv2
import os
from folium.plugins import FloatImage
import base64




ynu_map=folium.Map(location=[24.825, 102.85], 
                   zoom_start=15,
                   min_zoom=10,
                   max_zoom=18,
                   control_scale=True,
                   tiles='https://webst02.is.autonavi.com/appmaptile?style=6&x={x}&y={y}&z={z}',
                attr='高德卫星地图',
                name='高德卫星地图')

amap_satellite_layer = folium.TileLayer(
    tiles='https://webst02.is.autonavi.com/appmaptile?style=6&x={x}&y={y}&z={z}',
    attr='高德卫星地图',
    name='高德卫星地图'
).add_to(ynu_map)

amap_vector_layer = folium.TileLayer(
    tiles='http://wprd04.is.autonavi.com/appmaptile?lang=zh_cn&size=1&style=7&x={x}&y={y}&z={z}',
    attr='高德矢量地图',
    name='高德矢量地图'
).add_to(ynu_map)

amap_street_layer = folium.TileLayer(
    tiles='https://wprd01.is.autonavi.com/appmaptile?x={x}&y={y}&z={z}&lang=zh_cn&size=1&scl=2&style=8<ype=11',
    attr='高德路网地图',
    name='高德路网地图'
).add_to(ynu_map)


path=os.getcwd()
path_picture1="D:\img\zehu_lake.jpg"
path_picture2="D:\img\\bell_tower2.jpg"
path_picture3="D:\img\observatory.jpg"
path_picture4="D:\img\\rose_garden.jpg"
path_picture5="D:\img\SES.jpg"
path_picture6="D:\img\\athletic_field.jpg"
path_picture7="D:\img\library.jpg"
path_picture8="D:\img\\auditorium2.jpg"
path_picture9="D:\img\sports_center.jpg"
path_picture10="D:\img\lab_building.jpg"   
path_picture11="D:\img\YUSS.jpg"

# 读取图片并获取高度和宽度
image1 = cv2.imread(path_picture1)
height1, width1 = image1.shape[:2]
# 缩小图像
scale_factor = 0.1  # 调整这个因子以获得适当的大小
small_image1 = cv2.resize(image1, (int(width1 * scale_factor), int(height1 * scale_factor)))
# 图像编码
encoded = base64.b64encode(cv2.imencode('.png', small_image1)[1].tobytes())
html1 = '''<h>泽湖</h>
          <br><img src="data:image;base64,{}"><br>
          <p>泽湖本是学校用于储水的洼地，随着周围绿地建设以及天鹅、孔雀等动物的引入，泽湖现今已然成为打卡圣地。</p>'''.format(encoded.decode('UTF-8'))     ### 定义文字+图片的html格式
iframe1 = folium.IFrame(html=html1, width=width1*scale_factor, height=height1*scale_factor)
popup1 = folium.Popup(iframe1, max_width=500)


# 读取图片并获取高度和宽度
image2 = cv2.imread(path_picture2)
height2, width2 = image2.shape[:2]
# 缩小图像
scale_factor = 0.25  # 调整这个因子以获得适当的大小
small_image2 = cv2.resize(image2, (int(width2 * scale_factor), int(height2 * scale_factor)))
# 图像编码
encoded = base64.b64encode(cv2.imencode('.png', small_image2)[1].tobytes())
html2 = '''<h>钟楼</h>
          <br><img src="data:image;base64,{}"><br>
          <p>“云南大学的早晨，星星还在蓝天上眨着眼睛，太阳还没有睡醒，校园里的曙光还是暗夜中一缕躁动的诗魂。
          “噹——噹——噹——”云南大学钟楼的钟声响了。钟楼的声音那么浑厚，那么深沉，穿云透雾地在云南大学的校园的
          上空回荡。于是，在云南大学的东北角上，李广田校长居住的那一栋小楼（熊庆来曾经居住过）灯光亮了，他
          翻开了写字台上的讲稿，开始在洁白的稿纸上笔走经纶。王兰馨老师，此时应该是一边吟诵着宋词一边在忙着给李广田校长做他爱吃的山东煎饼了。”
          <br \>——淡墨，云南大学1959届中文系</p>'''.format(encoded.decode('UTF-8'))     ### 定义文字+图片的html格式
iframe2 = folium.IFrame(html=html2, width=width2*scale_factor, height=height2*scale_factor)
popup2 = folium.Popup(iframe2, max_width=500)


image3 = cv2.imread(path_picture3)
height3, width3 = image3.shape[:2]
scale_factor = 0.3  # 调整这个因子以获得适当的大小
small_image3 = cv2.resize(image3, (int(width3 * scale_factor), int(height3 * scale_factor)))
encoded = base64.b64encode(cv2.imencode('.png', small_image3)[1].tobytes())
html3 = '''<h>天文台</h>
          <br><img src="data:image;base64,{}"><br>
          <p>云南大学天文台位于云南大学呈贡校区云山顶，海拔2009.5米，是云南大学天文学一流
          学科建设方案中五大学科平台建设内容之一，同时也是天文学科发展的重要教学科研平台。
          云南大学天文台包括天文观测中心，天象厅，科普展厅及太阳历广场。具备培养天文学高素质
          人才、开展前沿科学观测以及科普教育的功能。</p>'''.format(encoded.decode('UTF-8'))     ### 定义文字+图片的html格式
iframe3 = folium.IFrame(html=html3, width=width3*scale_factor, height=height3*scale_factor)
popup3 = folium.Popup(iframe3, max_width=500)

image4 = cv2.imread(path_picture4)
height4, width4 = image4.shape[:2]
scale_factor = 0.08  # 调整这个因子以获得适当的大小
small_image4 = cv2.resize(image4, (int(width4 * scale_factor), int(height4 * scale_factor)))
encoded = base64.b64encode(cv2.imencode('.jpg', small_image4)[1].tobytes())
html4 = '''<h>玫瑰园</h>
          <br><img src="data:image;base64,{}"><br>
          <p>为美化校园环境，云南大学自2014年起在校内开辟区域种植大马士革、滇红品种的玫瑰花。目前玫瑰种植面积已超过30亩。
          其中，滇红玫瑰不仅可以观赏还能食用，为此学校食堂研制了玫瑰泡鲁达、玫瑰沙拉、鸡蛋炒玫瑰、玫瑰粥、玫瑰菠萝饭等30
          余道菜品。</p>'''.format(encoded.decode('UTF-8'))     ### 定义文字+图片的html格式
iframe4 = folium.IFrame(html=html4, width=width4*scale_factor, height=height4*scale_factor)
popup4 = folium.Popup(iframe4, max_width=500)

image5 = cv2.imread(path_picture5)
height5, width5 = image5.shape[:2]
scale_factor = 0.08  # 调整这个因子以获得适当的大小
small_image5 = cv2.resize(image5, (int(width5 * scale_factor), int(height5 * scale_factor)))
encoded = base64.b64encode(cv2.imencode('.jpg', small_image5)[1].tobytes())
html5 = '''<h>地球科学学院</h>
          <br><img src="data:image;base64,{}"><br>
          <p>    云南大学地球科学学院成立于2020年，办学历史可追溯于1925年建校之初就设有的矿冶系，曾经历过数学物理系、
          地球物理系、地球科学系、理学院、资源环境与地球科学学院，于2020年正式更名为地球科学学院。学院人才培养、科学
          研究和社会服务领域涵盖大气科学、地球物理学、地质学、地理学4个地球科学一级学科，是国内地球科学理科学科门类最
          为齐全的学院之一。学院现由大气科学系、地球物理系、地理科学系、地理信息科学系、地质学系、地球环境实验教学中心
          、云南省地理研究所、云南大学地球系统科学研究中心等单位组成。</p>'''.format(encoded.decode('UTF-8'))     ### 定义文字+图片的html格式
iframe5 = folium.IFrame(html=html5, width=width5*scale_factor, height=height5*scale_factor)
popup5 = folium.Popup(iframe5, max_width=500)

image6 = cv2.imread(path_picture6)
height6, width6 = image6.shape[:2]
scale_factor = 0.035  # 调整这个因子以获得适当的大小
small_image6 = cv2.resize(image6, (int(width6 * scale_factor), int(height6 * scale_factor)))
encoded = base64.b64encode(cv2.imencode('.jpg', small_image6)[1].tobytes())
html6 = '''<h>楠苑田径场</h>
          <br><img src="data:image;base64,{}"><br>
          <p>云南大学建校以来第一个拥有塑胶跑道的田径场，于2010年建成。
          （据不可靠消息，）该田径场跑道差点被建成煤渣跑道，当年体育学院的老师力排众议，
          否决了建设煤渣跑道的计划才让塑胶跑道诞生。
          <br \>2023年，随着东陆校区东一院体育场提升改造工程和呈贡东门体育中心完工，
          云南大学现有标准田径场数量提升到3个。</p>'''.format(encoded.decode('UTF-8'))     ### 定义文字+图片的html格式
iframe6 = folium.IFrame(html=html6, width=width6*scale_factor, height=height6*scale_factor)
popup6 = folium.Popup(iframe6, max_width=500)


image7 = cv2.imread(path_picture7)
height7, width7 = image7.shape[:2]
scale_factor = 0.08  # 调整这个因子以获得适当的大小
small_image7 = cv2.resize(image7, (int(width7 * scale_factor), int(height7 * scale_factor)))
encoded = base64.b64encode(cv2.imencode('.jpg', small_image7)[1].tobytes())
html7 = '''<h>图书馆</h>
          <br><img src="data:image;base64,{}"><br>
          <p>云南大学图书馆始建于1923年，近百年来，云南大学图书馆经历了筚路蓝缕的初创时期、传播新思想的新文化运动时期
          、艰苦卓绝的省立国立云南大学发展时期、面向现代化的开放时期。如今，她已发展成为面向一流学科建设、资源丰富、功
          能齐全、现代化、综合性、开放式、互动式、体验式的学习研究型智慧图书馆。
          <br>呈贡校区图书馆建筑面积58000平方米,截止2021年底，该馆纸质文献总量为3790953册（其中古籍17万册），电子图书1579834册，电子期刊320987册，中
          外文数据库123个（中文数据库69个、外文数据库54个），并有多个自建数据库，在生物生态学、历史学、民族学以及地方
          民族文献等方面形成了一定的馆藏特色。由日本科学协会捐赠的20万册日文图书也成为本馆馆藏的重要特色之一。</p>'''.format(encoded.decode('UTF-8'))     ### 定义文字+图片的html格式
iframe7 = folium.IFrame(html=html7, width=width7*scale_factor, height=height7*scale_factor)
popup7 = folium.Popup(iframe7, max_width=500)

image8 = cv2.imread(path_picture8)
height8, width8 = image8.shape[:2]
scale_factor = 0.08  # 调整这个因子以获得适当的大小
small_image8 = cv2.resize(image8, (int(width8 * scale_factor), int(height8 * scale_factor)))
encoded = base64.b64encode(cv2.imencode('.jpg', small_image8)[1].tobytes())
html8 = '''<h>学生会堂</h>
          <br><img src="data:image;base64,{}"><br>
          <p>学生会堂是云大呈贡校区的四大重点建筑之一，共有地上两层和地下一层，
          拥有可容纳1100余人的主会议大厅、218会议厅、接待室等会议场所，
          学生会堂及其门前的文典广场是云南大学举办大型活动、演出的场地。
          <br>学生会堂内主大厅的双层观众席设计，造成该建筑内部结构不同寻常，许多不熟悉内部结构的人常在会堂内迷路。</p>'''.format(encoded.decode('UTF-8'))     ### 定义文字+图片的html格式
iframe8 = folium.IFrame(html=html8, width=width8*scale_factor, height=height8*scale_factor)
popup8 = folium.Popup(iframe8, max_width=500)

image9 = cv2.imread(path_picture9)
height9, width9 = image9.shape[:2]
scale_factor = 0.25  # 调整这个因子以获得适当的大小
small_image9 = cv2.resize(image9, (int(width9 * scale_factor), int(height9 * scale_factor)))
encoded = base64.b64encode(cv2.imencode('.jpg', small_image9)[1].tobytes())
html9 = '''<h>文体中心</h>
          <br><img src="data:image;base64,{}"><br>
          <p>文体中心位于云南大学呈贡校区东北角，规划建设多功能体育馆、综合训练场地、
          田径场等，除游泳馆在建外，其它设施已于2023年建成并投入使用。</p>'''.format(encoded.decode('UTF-8'))     ### 定义文字+图片的html格式
iframe9 = folium.IFrame(html=html9, width=width9*scale_factor, height=height9*scale_factor)
popup9 = folium.Popup(iframe9, max_width=500)

image10 = cv2.imread(path_picture10)
height10, width10 = image10.shape[:2]
scale_factor = 0.25  # 调整这个因子以获得适当的大小
small_image10 = cv2.resize(image10, (int(width10 * scale_factor), int(height10 * scale_factor)))
encoded = base64.b64encode(cv2.imencode('.jpg', small_image10)[1].tobytes())
html10 = '''<h>实验中心</h>
          <br><img src="data:image;base64,{}"><br>
          <p>实验中心包括云南省云计算工程研究中心、自然资源药物化学省部共建教育部重点实验室
          、西南微生物多样性省部共建教育部重点实验室、植物实验温室等建筑</p>'''.format(encoded.decode('UTF-8'))     ### 定义文字+图片的html格式
iframe10 = folium.IFrame(html=html10, width=width10*scale_factor, height=height10*scale_factor)
popup10 = folium.Popup(iframe10, max_width=500)

image11 = cv2.imread(path_picture11)
height11, width11 = image11.shape[:2]
scale_factor = 0.08  # 调整这个因子以获得适当的大小
small_image11 = cv2.resize(image11, (int(width11 * scale_factor), int(height11 * scale_factor)))
encoded = base64.b64encode(cv2.imencode('.jpg', small_image11)[1].tobytes())
html11 = '''<h>云大附中呈贡校区</h>
          <br><img src="data:image;base64,{}"><br>
          <p>云南大学附属中学简称“云大附中（YUSS）”，由云南大学主办、云南省教育厅直管，是首届“全国文明校园”获得者，
          是云南省一级一等完全中学，是唯一一所获得质量领域最高政府性荣誉即中国质量奖（银奖）和云南省人民政府质量奖的学校。
          始建于1927年，历经东陆大学附属中学、国立云南大学附属中学、云南大学工农速成中学、云南大学教工子弟中学等时期，1982年
          恢复办学，1988年恢复使用“云大附中”校名。云大附中呈贡校区于2013年成立。
          <br>该学校被认为是云南省最好的中学之一，<s>但由于它的自费生比例较高，且自费生学费远高于公费生，引来颇多争议。</s></p>'''.format(encoded.decode('UTF-8'))     ### 定义文字+图片的html格式
iframe11 = folium.IFrame(html=html11, width=width11*scale_factor, height=height11*scale_factor)
popup11 = folium.Popup(iframe11, max_width=500)


folium.Marker(location=[24.827622015021312,102.84805927996563], tooltip='钟楼', popup=popup2).add_to(ynu_map)
folium.Marker(location=[24.83052866713712,102.8445001916425], tooltip='泽湖', popup=popup1).add_to(ynu_map)
folium.Marker(location=[24.827527317995553,102.8513380180496], tooltip='天文台', popup=popup3, icon=folium.Icon(color='darkpurple')).add_to(ynu_map)
folium.Marker(location=[24.8300,102.8420], tooltip='玫瑰园', popup=popup4, icon=folium.Icon(color='pink',icon='glyphicon-leaf')).add_to(ynu_map)
folium.Marker(location=[24.8270,102.8556], tooltip='地球科学学院', popup=popup5, icon=folium.Icon(color='lightblue',icon='globe')).add_to(ynu_map)
folium.Marker(location=[24.8201,102.8490], tooltip='楠苑田径场', popup=popup6, icon=folium.Icon(color='red',icon='flash')).add_to(ynu_map)
folium.Marker(location=[24.8244,102.8488], tooltip='图书馆', popup=popup7, icon=folium.Icon(color='orange',icon='book')).add_to(ynu_map)
folium.Marker(location=[24.8262,102.8467], tooltip='学生会堂', popup=popup8, icon=folium.Icon(color='blue',icon='comment')).add_to(ynu_map)
folium.Marker(location=[24.8284,102.8594], tooltip='文体中心', popup=popup9, icon=folium.Icon(color='red',icon='flash')).add_to(ynu_map)
folium.Marker(location=[24.8290,102.8530], tooltip='化工学院实验中心', popup=popup10, icon=folium.Icon(color='gray')).add_to(ynu_map)
folium.Marker(location=[24.8265,102.8638], tooltip='云大附中', popup=popup11).add_to(ynu_map)

#设置云南大学区域面要素的样式
def style_function(feature):
    return {
        "fillOpacity": 0.5,
        'fillColor': 'green',
        'fillOpacity': 0,
        'color': 'blue',
    }

geojson_path="D:\Lenovo\Desktop\云南大学\开源地理信息系统\Code\homework3\json\YunnanUniversity_GCJ02.json"
# 使用 utf-8 编码打开文件，默认打开geojson为GBK编码，当属性表中出现中文字符时会报错
with open(geojson_path, 'r', encoding='utf-8') as file:
    geojson_data = file.read()
    folium.GeoJson(data=geojson_data, 
               tooltip=folium.GeoJsonTooltip(fields=['name']),
               name='Yunnan University',
               style_function=style_function
               ).add_to(ynu_map)


ynu_map.add_child(plugins.MeasureControl(position ='topleft'))
ynu_map.add_child(FloatImage("img\compass_64.png", left=3, top=0, width=2, height=2))


# 添加鹰眼视图
minimap = plugins.MiniMap(
    toggle_display=True,
)
ynu_map.add_child(minimap)
ynu_map.add_child(folium.LatLngPopup())
folium.LayerControl().add_to(ynu_map)

ynu_map.save('D:\Lenovo\Desktop\云南大学\开源地理信息系统\Code\homework3\\poismap.html')
print('done')